# Концепция проекта

Надежное сквозное шифрование обеспечивается использованием криптографии исключительно на пользовательской стороне. При этом исключается обязательный экспорт ключей для переноса аккаунта на новое устройство, то есть во главе угла привычная схема авторизации по логину с паролем, а также простое добавление новых контактов по человекочитаемому идентификатору типа `user@server`.

Криптостойкие ключи подписи и шифрования выводятся из пароля пользователя (инвертированный хеш пароля подвергается преобразованию через алгоритм HKDF). На сервере хранятся исключительно публичные ключи и служебные дескрипторы о доступности пользователя, а также зашифрованные сообщения, ожидающие появления адресата в сети, после чего сообщения могут быть удалены. Шифрование сообщений - неотъемлемая часть архитектуры.  Собеседник добавляется в список контактов по идентификатору: на сервер отправляется запрос ключей конкретного пользователя. Все сообщения без исключения, которые адресуются пользователю, шифруются его публичным ключом шифрования и подписываются ключом отправителя. 

Публичный ключ шифрования (x25519) входит в базовый идентификатор пользователя. Публичный ключ подписи (ed25519) также входит в базовый идентификатор пользователя и служит для проверки авторства полученного сообщения. Данный криптографический минимум, зарекомендовавший себя десятилетиями, является основой безопасности Algorithm: ваши сообщения можете прочесть только вы, при этом всегда есть полная уверенность в том, кто является его отправителем. 

При подключении к серверу, пользователь отправляет идентификаторы доступности. Главным образом это адреса пир-ту-пир сетей, например, I2P и Yggdrasil (TOR по [религиозным соображениям](https://habr.com/ru/post/554420/) поддерживаться не будет). Пользователь имеет возможность выбора сетей, через которые он желает при возможности соединяться с собеседником напрямую. Если транспортной совместимости с собеседником нет, либо установлен флаг принудительной работы через сервер, общение с клиентом возможно только через сервер. Это имеет смысл при подключении через сети, не обеспечивающие анонимность, либо через клирнет (поддержка которого планируется), где большинство абонентов не имеют белого IP-адреса и не доступны для внешних обращений извне.

